package controller

import (
	"awesomeProject1/微信登录demo/baseBean"
	"awesomeProject1/微信登录demo/models"
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"net/http"
)

func LoginHandel(c *gin.Context) {

	var jsCode models.GetCode
	err := c.ShouldBind(&jsCode)
	if err != nil {
		baseBean.Fail(c, "请求失败", err)
		return
	}
	//获取前端传递过来的code
	code := jsCode.JsCode
	getSessionKeyOrOpenidId(c, code)
}

//用前端传递过来的code去请求微信服务器，获取SessionKey 和 OpenidId
func getSessionKeyOrOpenidId(c *gin.Context, code string) {

	get, err := http.Get("https://api.weixin.qq.com/sns/jscode2session?appid=wxd8bc6d370a39eef5&secret=7a6b903d32b04e385b806edb8bdf0c06&js_code=" + code + "&grant_type=authorization_code")
	if err != nil {
		panic(err)
	}
	defer get.Body.Close()
	all, err := ioutil.ReadAll(get.Body)
	if err != nil {
		panic(err)
	}
	//fmt.Println(string(all))

	var sessionMode models.LoginModels
	err = json.Unmarshal(all, &sessionMode)
	if err != nil {
		baseBean.Fail(c, "登录失败,数据序列化出现异常", err.Error())
		return
	}
	fmt.Println("解析前的数据：", string(all))
	fmt.Println("解析后的数据：", sessionMode)

	fmt.Println("get出来的 Openid：", sessionMode.Openid)
	fmt.Println("get出来的 SessionKey：", sessionMode.SessionKey)

	if sessionMode.Openid == "" && sessionMode.SessionKey == "" {
		baseBean.Fail(c, "微信官方返回错误码：", string(all))
		return
	}

	err = models.InsertSessionKey(sessionMode.SessionKey, sessionMode.Openid)
	if err != nil {
		baseBean.Fail(c, "数据库插入出错: ", err.Error())
		return
	}
	/*这里登陆成功后，需要将openid返回给前端的，
	因为在后续的手机号码授权解密的时候，
	需要让前端传递过来,然后通过openid去查询数据库中的 sessionKey
	然后拿到sessionKey以后才能去解密获得手机号码*/
	baseBean.Success(c, "请求成功", nil)
}
